<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Administrador extends CJR_Controller {
  public function __construct() {
  	parent::__construct();
    $this->load->model('administrador_model');
  }
  
  public function index() {
    $this->load->model('user_model');
    $id = $this->session->userdata('id');
    $this->loadPage($this->user_model->getName($id), array(
      'administrador/home' => array()
    ));
  }
  
  public function settings() {
    $this->load->model('settings_model');
    
    if (count($_POST)) {
      $this->settings_model->updateSettings($_POST);
      $this->session->set_flashdata('message', 'Configurações atualizadas com sucesso!');
      redirect('administrador/settings');
    }
    
    $this->load->helper('directory');
    $this->loadPage('Configurações do sistema', array(
      'administrador/settings' => array(
        'settings' => $this->settings_model->getSettings(),
        'directories' => getTemplateFolders(),
        'register_types' => $this->settings_model->getRegisterTypes(),
        'timezones' => $this->settings_model->getTimezones()
      )
    ));
  }
  
  // Funcao para cadastrar os perfis de usuarios.
  public function cadastrarPerfil() {
    if (count($_POST)) {
      $nome = $_POST['name'];
      $descricao = $_POST['description'];
      $actions = $_POST['actions'];
      $this->administrador_model->insertProfile($nome, $descricao, $actions);
      $this->session->set_flashdata('message', 'Perfil inserido com sucesso!');
      redirect('administrador/listarPerfil');
    }
    $data['actions'] = $this->administrador_model->getActions();
    foreach ($data['actions'] as $action) {
    	$action->checked = FALSE;
    }
    if(isset($_GET['profiles'])) {
	    $actions = $this->administrador_model->getActionsInProfiles($_GET['profiles']);
	    foreach ($data['actions'] as $action) {
	      $i = 0;
	      $flag = 0;
	      while (($flag == 0)&&($i < count($actions))) {
	        if ($action->id == $actions[$i]->user_action_id) {
	          $flag = 1;
	          $action->checked = TRUE;
	        }
	        $i++;
	      }
	    }
    }
    $this->loadPage('Cadastrar perfil', array(
      'administrador/cadastrarPerfil' => $data
    ));
  }
  // Funcao para pre-marcar acoes na criacao de perfil de acordo com as herancas.
  public function criarPerfil() {
    $data['profiles'] = $this->administrador_model->getProfiles();
    $this->loadPage('Criar perfil', array(
      'administrador/criarPerfil' => $data
    ));
  }
  // Funcao para listar os perfis.
  public function listarPerfil() {
    $this->load->model('administrador_model');
    $data['profiles'] = $this->administrador_model->getProfiles();
    $this->loadPage('Lista de perfis', array(
      'administrador/listarPerfil' => $data
    ));
  }
  // Funcao para editar um perfil.
  public function editarPerfil($perfil = 0) {
  	if(!$this->administrador_model->profileExists($perfil)){
  		$this->session->set_flashdata('error', 'O perfil nao existe!');
      	redirect('administrador/listarPerfil');
  	}
    if (count($_POST)) {
    	$id = $perfil;
      	$nome = $_POST['name'];
      	$descricao = $_POST['description'];
      	$actions = $_POST['actions'];
      	$this->administrador_model->updateProfile($id, $nome, $descricao, $actions);
      	$this->session->set_flashdata('message', 'Perfil inserido com sucesso!');
    	redirect('administrador/listarPerfil');
    }
    $editar = $perfil;
    $actions = $this->administrador_model->getActionsInProfiles($editar);
    $data['actions'] = $this->administrador_model->getActions();
    foreach ($data['actions'] as $action) {
      $i = 0;
      $flag = 0;
      $action->checked = FALSE;
      while (($flag == 0)&&($i < count($actions))) {
     	if ($action->id == $actions[$i]->user_action_id) {
          $flag = 1;
          $action->checked = TRUE;
        }
        $i++;
      }
    }
    $data['profiles'] = $this->administrador_model->getProfile($editar);
    $this->loadPage('Editar perfil '.$data['profiles']->name, array(
      'administrador/editarPerfil' => $data
    ));
  }
  // Funcao para deletar um perfil.
  public function deletarPerfil($perfil = 0) {
  	if(!$this->administrador_model->profileExists($perfil)){
  		$this->session->set_flashdata('error', 'O perfil nao existe!');
      	redirect('administrador/listarPerfil');
  	}
    $deletar = $perfil;
    $this->administrador_model->deleteProfile($deletar);
    $this->session->set_flashdata('message', 'Perfil deletado com sucesso!');
    redirect('administrador/listarPerfil');
  }
  // Funcao para listar os perfis.
  public function listarUsuario() {
    $this->load->model('administrador_model');
    $data['usuarios'] = $this->administrador_model->getUsers();
    $this->loadPage('Lista de usuarios', array(
      'administrador/listarUsuario' => $data
    ));
  }
  // Funcao para editar os Usuarios
  public function editarUsuario($usuario = 0) {
  	if(!$this->administrador_model->userExists($usuario)){
  		$this->session->set_flashdata('error', 'O Usuario nao existe!');
      	redirect('administrador/listarUsuario');
  	}
    if (count($_POST)) {
    	$id = $usuario;
      	$name = $_POST['name'];
      	$email = $_POST['email'];
	    $password = $_POST['password'];
		$timezone_id = $_POST['timezone_id'];
	    $dst_offset = $_POST['dst_offset'];
	    $data_user = array (
	    	'email' => $email,
	    	'password' => $password,
	    	'name' => $name,
	    	'timezone_id' => $timezone_id,
	    	'dst_offset' => $dst_offset
	    );
      	$perfis = $_POST['perfis'];
      	$this->administrador_model->updateUser($id, $data_user, $perfis);
      	$this->session->set_flashdata('message', 'Usuario editado com sucesso!');
    	redirect('administrador/listarUsuario');
    }
    $editar = $usuario;
    $perfis = $this->administrador_model->getProfilesInUser($editar);
    $data['perfis'] = $this->administrador_model->getProfiles();
    foreach ($data['perfis'] as $perfil) {
      $i = 0;
      $flag = 0;
      $perfil->checked = FALSE;
      while (($flag == 0)&&($i < count($perfis))) {
     	if ($perfil->id == $perfis[$i]->user_profile_id) {
          $flag = 1;
          $perfil->checked = TRUE;
        }
        $i++;
      }
    }
    $data['usuario'] = $this->administrador_model->getUser($editar);
    $this->loadPage('Editar usuario '.$data['usuario']->name, array(
      'administrador/editarUsuario' => $data
    ));
  }
  
  // Funcao para deletar um usuario.
  public function deletarUsuario($usuario = 0) {
  	if(!$this->administrador_model->userExists($usuario)){
  		$this->session->set_flashdata('error', 'O usuario nao existe!');
      	redirect('administrador/listarUsuario');
  	}
    $deletar = $usuario;
    $this->administrador_model->deleteUser($deletar);
    $this->session->set_flashdata('message', 'Usuario deletado com sucesso!');
    redirect('administrador/listarUsuario');
  }

  // Funcao para adicionar Perfil ao usuario
  public function usuarioEditarPerfil($usuario = 0) {
  	if(!$this->administrador_model->userExists($usuario)){
  		$this->session->set_flashdata('error', 'O Usuario nao existe!');
      	redirect('administrador/listarUsuario');
  	}
    if (count($_POST)) {
    	$id = $usuario;
      	$perfis = $_POST['perfis'];
      	$this->administrador_model->updateProfileInUser($id, $perfis);
      	$this->session->set_flashdata('message', 'Usuario editado com sucesso!');
    	redirect('administrador/listarUsuario');
    }
    $editar = $usuario;
    $perfis = $this->administrador_model->getProfilesInUser($editar);
    $data['perfis'] = $this->administrador_model->getProfiles();
    foreach ($data['perfis'] as $perfil) {
      $i = 0;
      $flag = 0;
      $perfil->checked = FALSE;
      while (($flag == 0)&&($i < count($perfis))) {
     	if ($perfil->id == $perfis[$i]->user_profile_id) {
          $flag = 1;
          $perfil->checked = TRUE;
        }
        $i++;
      }
    }
    $data['usuario'] = $this->administrador_model->getUser($editar);
    $this->loadPage('Adicionar perfil ao usuario '.$data['usuario']->name, array(
      'administrador/usuarioEditarPerfil' => $data
    ));
  }
}

